분산이 일정하지 않은 경우 
A Time Series: 12 × 12 
 
1949 
112 
118 
132 
129 
121 
135 
148 
148 
136 
119 
104 
118 
 
1950 
115 
126 
141 
135 
125 
149 
170 
170 
158 
133 
114 
140 
 
1951 
145 
150 
178 
163 
172 
178 
199 
199 
184 
162 
146 
166 
 
1952 
171 
180 
193 
181 
183 
218 
230 
242 
209 
191 
172 
194 
 
1953 
196 
196 
236 
235 
229 
243 
264 
272 
237 
211 
180 
201 
 
1954 
204 
188 
235 
227 
234 
264 
302 
293 
259 
229 
203 
229 
 
1955 
242 
233 
267 
269 
270 
315 
364 
347 
312 
274 
237 
278 
 
1956 
284 
277 
317 
313 
318 
374 
413 
405 
355 
306 
271 
306 
 
1957 
315 
301 
356 
348 
355 
422 
465 
467 
404 
347 
305 
336 
 
1958 
340 
318 
362 
348 
363 
435 
491 
505 
404 
359 
310 
337 
 
1959 
360 
342 
406 
396 
420 
472 
548 
559 
463 
407 
362 
405 
 
1960 
417 
391 
419 
461 
472 
535 
622 
606 
508 
461 
390 
432 
 
 
 
 
plot.ts (z, main =  "Time series plot for Airpassengers data" ) 
 
- Box-Cox transformation
\[f_\lambda(Z_t) = \begin{cases}
\dfrac{Z_t^\lambda-1}{\lambda}, & Z_t \geq 0, \lambda>0 \\
log(Z_t), & \lambda=0
\end{cases}\] 
 forecast:: BoxCox.lambda (z, method= 'loglik' ) 
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
 
 
0.2
 
 forecast:: BoxCox.lambda (z, method =  "guerrero" ) 
-0.294715585559316
 
- ts객체가 들어가야함
 forecast:: BoxCox (z,lambda=  forecast:: BoxCox.lambda (z, method= 'loglik' )) 
A Time Series: 12 × 12 
 
1949 
7.847352 
7.982144 
8.276536 
8.215632 
8.047493 
8.336343 
8.583833 
8.583833 
8.356042 
8.004073 
7.658338 
7.982144 
 
1950 
7.915451 
8.153584 
8.452835 
8.336343 
8.132639 
8.602141 
8.965606 
8.965606 
8.762630 
8.296592 
7.892911 
8.433699 
 
1951 
8.528312 
8.620350 
9.094641 
8.848653 
8.998313 
9.094641 
9.412543 
9.412543 
9.188405 
8.831619 
8.546920 
8.899258 
 
1952 
8.981998 
9.126173 
9.324566 
9.141833 
9.172949 
9.677811 
9.835957 
9.987634 
9.554566 
9.294754 
8.998313 
9.339379 
 
1953 
9.368824 
9.368824 
9.912567 
9.899908 
9.823034 
10.000000 
10.250736 
10.342064 
9.925183 
9.582316 
9.126173 
9.441397 
 
1954 
9.484251 
9.249564 
9.899908 
9.797051 
9.887205 
10.250736 
10.666479 
10.571969 
10.192525 
9.823034 
9.470023 
9.823034 
 
1955 
9.987634 
9.874459 
10.285240 
10.308071 
10.319435 
10.799092 
11.262611 
11.107788 
10.768883 
10.364560 
9.925183 
10.409160 
 
1956 
10.475107 
10.398058 
10.819103 
10.778978 
10.829071 
11.351000 
11.678616 
11.613495 
11.181384 
10.707761 
10.330766 
10.707761 
 
1957 
10.799092 
10.656090 
11.190490 
11.117061 
11.181384 
11.750682 
12.078927 
12.093594 
11.605283 
11.107788 
10.697481 
11.004343 
 
1958 
11.042269 
10.829071 
11.244701 
11.117061 
11.253666 
11.852637 
12.265784 
12.363141 
11.605283 
11.217686 
10.748614 
11.013858 
 
1959 
11.226711 
11.061098 
11.621691 
11.538992 
11.734774 
12.130041 
12.649244 
12.719537 
12.064211 
11.629871 
11.244701 
11.613495 
 
1960 
11.710799 
11.497014 
11.726798 
12.049443 
12.130041 
12.564701 
13.102063 
13.007960 
12.383721 
12.049443 
11.488567 
11.829327 
 
 
 
 
 forecast:: BoxCox (z,lambda=  'auto' ) 
A Time Series: 12 × 12 
 
1949 
2.548535 
2.561426 
2.588461 
2.582990 
2.567558 
2.593773 
2.615143 
2.615143 
2.595510 
2.563492 
2.529884 
2.561426 
 
1950 
2.555089 
2.577352 
2.603953 
2.593773 
2.575434 
2.616686 
2.646282 
2.646282 
2.629992 
2.590249 
2.552929 
2.602296 
 
1951 
2.610433 
2.618215 
2.656336 
2.636968 
2.648852 
2.656336 
2.680161 
2.680161 
2.663501 
2.635595 
2.612017 
2.641022 
 
1952 
2.647572 
2.658759 
2.673698 
2.659957 
2.662328 
2.699069 
2.709945 
2.720109 
2.690390 
2.671486 
2.648852 
2.674793 
 
1953 
2.676962 
2.676962 
2.715111 
2.714262 
2.709067 
2.720927 
2.737151 
2.742897 
2.715955 
2.692360 
2.658759 
2.682259 
 
1954 
2.685357 
2.668111 
2.714262 
2.707296 
2.713408 
2.737151 
2.762643 
2.756996 
2.733443 
2.709067 
2.684331 
2.709067 
 
1955 
2.720109 
2.712549 
2.739332 
2.740768 
2.741481 
2.770427 
2.796406 
2.787934 
2.768668 
2.744300 
2.715955 
2.747066 
 
1956 
2.751119 
2.746379 
2.771588 
2.769257 
2.772164 
2.801154 
2.818211 
2.814887 
2.791987 
2.765084 
2.742191 
2.765084 
 
1957 
2.770427 
2.762027 
2.792485 
2.788447 
2.791987 
2.821853 
2.837961 
2.838662 
2.814466 
2.787934 
2.764478 
2.782161 
 
1958 
2.784288 
2.772164 
2.795437 
2.788447 
2.795922 
2.826939 
2.846793 
2.851301 
2.814466 
2.793969 
2.767483 
2.782696 
 
1959 
2.794460 
2.785340 
2.815307 
2.811044 
2.821052 
2.840400 
2.864196 
2.867286 
2.837255 
2.815726 
2.795437 
2.814887 
 
1960 
2.819842 
2.808860 
2.820650 
2.836545 
2.840400 
2.860440 
2.883580 
2.879651 
2.852247 
2.836545 
2.808419 
2.825783 
 
 
 
 
- linear model이 들어가야함
 z_boxcox <-  forecast:: BoxCox (z, lambda= bc$ x[which.max (bc$ y)]) 
 
par (mfrow= c (2 ,2 )) 
plot.ts (z, main =  "Original" ) 
plot.ts (log (z), main =  "log(z)" ) 
plot.ts (sqrt (z),, main =  "sqrt(z)" ) 
plot.ts (z_boxcox, main =  "Boxcox_lambda=0.06" ) 
graphics.off () 
 
 
확률적 추세 제거 
- 확률보행과정의 정상화
\(Z_t = Z_{t−1} + ϵ_t, ϵ_t ∼ WN(0, σ^2)\)  - AR(1) with \(ϕ = 1\) 
 e <-  round (rnorm (10 ),2 ) 
 z <-  cumsum (e) 
plot.ts (z) 
 
 e <-  round (rnorm (1000 ),2 ) 
 z <-  cumsum (e) 
 forecast:: tsdisplay (z, lag.max= 24 ) 
 
\(ΔZ_t = Z_t − Z_{t−1} = ϵ_t\) 
차분한 확률보행과정의 시도표 및 ACF/PACF 그림 
 
- diff:차분함수
예시
4: 7-3 : a[2]-a[1]
-5: 2-7 : a[3] - a[2]
7: 9-2 : a[4] - a[3]
-1: 2-3 : a[3] - a[1]
2: 9-7: a[4] - a[2]
options (repr.plot.width =  12 , repr.plot.height =  10 ) 
 forecast:: tsdisplay (diff (z), lag.max= 24 ) 
 
\(ΔZ_t ∼ WN = ARMA(0, 0) ⇒ Z_t ∼ ARIMA(0, 1, 0)\) 
로그변환한 Airpassengers data 에 대한 확률적 추세 확인 
 
 logz <-  log (AirPassengers) 
options (repr.plot.width =  12 , repr.plot.height =  6 ) 
plot.ts (logz) 
 
추세가 있다. 결정적 추세로 해도 될거 같기도 하고… 
 
par (mfrow= c (1 ,2 )) 
acf (logz) 
pacf (logz) 
 
계절성분 떄문에 acf그래프가 중간에 내려오다가 볼록 튀어 나온 것 
 
차분을 진행한다.
\(ΔZ_t = (1 − B)Z_t = Z_t − Z_{t−1}\) 
 d_log_z =  diff (logz) 
plot.ts (d_log_z) 
 
 forecast:: tsdisplay (d_log_z, lag.max= 36 ) 
 
여전히 계절성분이 남아있으므로, 계절차분 진행
\(Δ_{12}ΔZ_t = (1 − B^{12})(1 − B)Z_t = (1 − B^{12})(Z_t − Z_{t−1}) = Z_t − Z_{t−1} − Z_{t−12} − Z_{t−1}\) 
 ds_d_log_z <-  diff (d_log_z, 12 ) 
plot.ts (ds_d_log_z) 
 
 forecast:: tsdisplay (ds_d_log_z, lag.max= 36 ) 
 
하지만, 일반적으로 계절성분과 추세가 동시에 있는 경우 계절차분을 먼저 진행한다 
 
 ds_log_z <-  diff (logz, 12 ) 
ts.plot (ds_log_z) 
 
 forecast:: tsdisplay (ds_log_z, lag.max= 36 ) 
 
확률적추세가 있어 보이지만, AR 모형에서 ACF가 감소하는 형태라고 할 수도 있다. 이 경우에는 추세를 제거하기 위한 차분을 더 진행하는 것을 결정하는 것이 어렵다.
 
depart data 
 z <- scan ("depart.txt" ) 
plot.ts (z) 
 
 log_z <-  log (z) 
 forecast:: tsdisplay (log_z, lag.max= 36 ) 
 
 
계절차분을 먼저 진행 
 ds_log_z <-  diff (log_z, 12 ) 
 forecast:: tsdisplay (ds_log_z, lag.max= 36 ) 
 
이 데이터 시도표 상으로는 확률적인 추세가 있어보이지만, 역시 ACF만 보고 차분이 필 요한 가에 대한 결정을 하는 것이 쉽지 않다. 
 
 
여러가지 Simulation 
 n <-  200  
 x =  arima.sim (n= n, list (order= c (1 ,0 ,0 ), ar= 0.5 )) #AR(1)  
 z =  arima.sim (n= n, list (order= c (1 ,1 ,0 ), ar= 0.5 )) #ARIMA(1,1,0)  
 
 forecast:: tsdisplay (x, lag.max= 36 , main =  "AR(1)" ) 
 
 forecast:: tsdisplay (z, lag.max= 36 , main =  "ARIMA(1,1,0)" ) 
 
acf가 지수적으로 감소하고 있다. 차분이 필요하다.
 
ARIMA(1,1,0)모형은 차분하면 AR(1)모형이 된다.
 
 
 forecast:: tsdisplay (diff (z), lag.max= 36 , main =  "(1-B)z" ) 
 
 n <-  200  
 x =  arima.sim (n= n, list (order= c (0 ,0 ,1 ), ma= - 0.8 )) #MA(1)  
 z =  arima.sim (n= n, list (order= c (0 ,1 ,1 ), ma= - 0.8 )) #ARIMA(0,1,1)  
 
 forecast:: tsdisplay (x, lag.max= 36 , main =  "MA(1)" ) 
 
 forecast:: tsdisplay (z, lag.max= 36 , main =  "ARIMA(0,1,1)" ) 
 
 forecast:: tsdisplay (diff (z), lag.max= 36 , main =  "(1-B)z" ) 
 
 n <-  200  
 x =  arima.sim (n= n, list (order= c (1 ,0 ,1 ), ar= 0.5 , ma= - 0.8 )) #ARMA(1,1)  
 z =  arima.sim (n= n, list (order= c (1 ,1 ,1 ), ar= 0.5 , ma= - 0.8 )) #ARIMA(1,1,1)  
 
 forecast:: tsdisplay (x, lag.max= 36 , main =  "ARMA(1,1)" ) 
 
 forecast:: tsdisplay (z, lag.max= 36 , main =  "ARIMA(1,1,1)" ) 
 
 forecast:: tsdisplay (diff (z), lag.max= 36 , main =  "(1-B)z" ) 
 
 
과대차분 
## ARIMA(0,1,1)  
 z =  arima.sim (n= 1000 , list (order= c (0 ,1 ,1 ), ma= 0.5 )) 
 
 forecast:: tsdisplay (z, lag.max= 36 , main =  "ARIMA(0,1,1)" ) 
 
#한 번 차분  
 d_z <-  diff (z) 
 forecast:: tsdisplay (d_z, lag.max= 36 , main =  "ARIMA(0,1,1)" ) 
 
# 한 번 더 차분  
 d2_z <-  diff (d_z) 
 forecast:: tsdisplay (d2_z, lag.max= 36 , main =  "ARIMA(0,1,1)" ) 
 
한 번 차분을 하면 정상시계열이 된다. 그리고 한 번 더 차분해도 마찬가지로 정상시계 열이다 
 
sd (z) 
sd (diff (z)) 
sd (diff (diff (z))) 
8.72895467185367
1.18251197758341
1.2484612507557
 
차분을 두번 하고 나면 분산이 커진다. 이를 과대차분이라고 한다